/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCategoriaArticulo;
import pe.com.cotelasa.scp.dao.impl.DAOProveedorImpl;
import pe.com.cotelasa.scp.dominio.service.IServicioCategoriaArticulo;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.common.ResultadoValidacion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.CategoriaArticulo;

/**
 *
 * @author DESARROLLO01
 */
@Service

public class ServicioCategoriaArticuloImpl implements IServicioCategoriaArticulo,Serializable {
    
    @Inject 
    private IDAOCategoriaArticulo daoCategoriaArticulo;
    

    @Override
    public Collection<CategoriaArticulo> listarCategoriasArticulosActivos() {
        try {
            return daoCategoriaArticulo.listarActivos(CategoriaArticulo.class);
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public CategoriaArticulo conseguirCategoriaArticuloPorId(Integer idCategoriaArticulo) {
        try {
            return daoCategoriaArticulo.obtenerEntidadPorId(CategoriaArticulo.class,idCategoriaArticulo);
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public Collection<CategoriaArticulo> listarTodasCategoriaArticulo() {
        try {
            return daoCategoriaArticulo.listarTodos(CategoriaArticulo.class);
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    @Override
    public boolean validarCategoriaArticulo(CategoriaArticulo categoriaArticulo) throws ServiceException {
        try {
            if(daoCategoriaArticulo.obtenerCategoriaArticuloPorNombre(categoriaArticulo.getNombre())==null)
                return true;
            else return false;
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public ResultadoServicio guardarCategoriaArticulo(CategoriaArticulo categoriaArticulo) {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            categoriaArticulo.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            categoriaArticulo.setFecCreacion(new Date());

            daoCategoriaArticulo.insertar(categoriaArticulo);
        } catch (DAOException ex) {
            ex.printStackTrace();
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio.setMensaje("Ocurrio un problema al tratar de guardar el proveedor. ");
            Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarCategoriaArticulo(CategoriaArticulo categoriaArticulo) {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoCategoriaArticulo.actualizar(categoriaArticulo);
        } catch (DAOException ex) {
            ex.printStackTrace();
            Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<CategoriaArticulo> listarCategoriasPadres() {
        try {
            return daoCategoriaArticulo.obtenerCategoriasPadres();
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    @Override
    public Collection<CategoriaArticulo> listarCategoriasPorFiltro(CategoriaArticulo categoriaArticulo) throws ServiceException {
        try {
            
           return daoCategoriaArticulo.obtenerCategoriasPorFiltro(categoriaArticulo);
           
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    public Collection<CategoriaArticulo> listarCategoriasPorFiltro2(CategoriaArticulo categoriaArticulo) throws ServiceException{
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("nombre", categoriaArticulo.getNombre());
            parametro.put("estadoRegistro", "A");
            return daoCategoriaArticulo.obtenerColeccionEntidadPorFiltros(CategoriaArticulo.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public CategoriaArticulo obtenerCategoriaArticuloPorNombre(String nombreCategoriaArticulo) throws ServiceException {
        try {
            return daoCategoriaArticulo.obtenerCategoriaArticuloPorNombre(nombreCategoriaArticulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
    
    @Override
    public Collection<CategoriaArticulo> listarCategoriasHijos(CategoriaArticulo categoriaArticulo) {
        try {
            return daoCategoriaArticulo.obtenerCategoriasHijos(categoriaArticulo);
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
     @Override
    public Collection<CategoriaArticulo> listarCategoriasTP() {
        try {
            return daoCategoriaArticulo.listarCategoriasTP();
        } catch (DAOException ex) {
             Logger.getLogger(ServicioCategoriaArticuloImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
     
    @Override
    public CategoriaArticulo buscarCategoriaPadre(CategoriaArticulo categoriaArticulo) throws ServiceException {
        try {
            return daoCategoriaArticulo.buscarCategoriaPadre(categoriaArticulo);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    
}
